package top.chmin.project.cloud.common.entity.column.auto;

// field import auto
// #bind.field.id#

import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import top.chmin.project.cloud.common.entity.*;

/**
 * chmin
 * 2023-12-27 15:10:14
 * cloud-builder
 */
@Getter
@Setter
@Accessors(chain = true)
public class EntityColumn extends Model {

    // field auto
// #bind.field.tableCode#
    // 实体编码
    private String tableCode;
// $bind.field.tableCode$

    // #bind.field.columnType#
    // 字段数据类型
    private String columnType;
// $bind.field.columnType$

    // #bind.field.columnLength#
    // 字段长度限制
    private Integer columnLength;
// $bind.field.columnLength$

    // #bind.field.columnPrecision#
    // 数字位数
    private Integer columnPrecision;
// $bind.field.columnPrecision$

    // #bind.field.columnScale#
    // 小数精度
    private Integer columnScale;
// $bind.field.columnScale$

    // #bind.field.columnNullable#
    // 字段null
    private String columnNullable;
// $bind.field.columnNullable$

    // #bind.field.fieldName#
    // 属性名称
    private String fieldName;
// $bind.field.fieldName$

    // #bind.field.columnName#
    // 字段名称
    private String columnName;
// $bind.field.columnName$

    // #bind.field.methodName#
    // 方法名称
    private String methodName;
// $bind.field.methodName$

    // #bind.field.simpleType#
    // 属性简单类型
    private String simpleType;
// $bind.field.simpleType$

    // #bind.field.fullType#
    // 属性完整类型
    private String fullType;
// $bind.field.fullType$

    // #bind.field.remark#
    // 属性备注
    private String remark;
// $bind.field.remark$

    // #bind.field.dataOrder#
    // 数据库排序
    private Integer dataOrder;
// $bind.field.dataOrder$

    // #bind.field.searchOrder#
    // 列表查询排序
    private Integer searchOrder;
// $bind.field.searchOrder$

    // #bind.field.formOrder#
    // 弹窗排序
    private Integer formOrder;
// $bind.field.formOrder$

    // #bind.field.pageColumnOrder#
    // 列表排序
    private Integer pageColumnOrder;
// $bind.field.pageColumnOrder$

    // #bind.field.searchExist#
    // 搜素是否启用
    private String searchExist;
// $bind.field.searchExist$

    // #bind.field.saveExist#
    // 新增是否启用
    private String saveExist;
// $bind.field.saveExist$

    // #bind.field.updateExist#
    // 更新是否启用
    private String updateExist;
// $bind.field.updateExist$

    // #bind.field.detailExist#
    // 详情是否启用
    private String detailExist;
// $bind.field.detailExist$

    // #bind.field.pageColumnExist#
    // 列表是否启用
    private String pageColumnExist;
// $bind.field.pageColumnExist$

    // #bind.field.fieldCode#
    // 字段编码
    private String fieldCode;
// $bind.field.fieldCode$


    @Override
    public EntityColumnEPC getPreCondition() {
        return new EntityColumnEPC();
    }

    public class EntityColumnEPC extends PreCondition {
        private EntityColumnEPC() {
        }

        private EntityColumnEPC(EntityColumnEPC parent) {
            super(parent);
        }

        public EntityColumnEPC forUpdate() {
            addUpdateSql("update_time = ?", updateTime);
            addUpdateSql("update_by = ?", updateBy);
// field update auto
// #bind.field.tableCode#
            addUpdateSql("table_code = ?", tableCode);
// $bind.field.tableCode$

// #bind.field.columnType#
            addUpdateSql("column_type = ?", columnType);
// $bind.field.columnType$

// #bind.field.columnLength#
            addUpdateSql("column_length = ?", columnLength);
// $bind.field.columnLength$

// #bind.field.columnPrecision#
            addUpdateSql("column_precision = ?", columnPrecision);
// $bind.field.columnPrecision$

// #bind.field.columnScale#
            addUpdateSql("column_scale = ?", columnScale);
// $bind.field.columnScale$

// #bind.field.columnNullable#
            addUpdateSql("column_nullable = ?", columnNullable);
// $bind.field.columnNullable$

// #bind.field.fieldName#
            addUpdateSql("field_name = ?", fieldName);
// $bind.field.fieldName$

// #bind.field.columnName#
            addUpdateSql("column_name = ?", columnName);
// $bind.field.columnName$

// #bind.field.methodName#
            addUpdateSql("method_name = ?", methodName);
// $bind.field.methodName$

// #bind.field.simpleType#
            addUpdateSql("simple_type = ?", simpleType);
// $bind.field.simpleType$

// #bind.field.fullType#
            addUpdateSql("full_type = ?", fullType);
// $bind.field.fullType$

// #bind.field.remark#
            addUpdateSql("remark = ?", remark);
// $bind.field.remark$

// #bind.field.dataOrder#
            addUpdateSql("data_order = ?", dataOrder);
// $bind.field.dataOrder$

// #bind.field.searchOrder#
            addUpdateSql("search_order = ?", searchOrder);
// $bind.field.searchOrder$

// #bind.field.formOrder#
            addUpdateSql("form_order = ?", formOrder);
// $bind.field.formOrder$

// #bind.field.pageColumnOrder#
            addUpdateSql("page_column_order = ?", pageColumnOrder);
// $bind.field.pageColumnOrder$

// #bind.field.searchExist#
            addUpdateSql("search_exist = ?", searchExist);
// $bind.field.searchExist$

// #bind.field.saveExist#
            addUpdateSql("save_exist = ?", saveExist);
// $bind.field.saveExist$

// #bind.field.updateExist#
            addUpdateSql("update_exist = ?", updateExist);
// $bind.field.updateExist$

// #bind.field.detailExist#
            addUpdateSql("detail_exist = ?", detailExist);
// $bind.field.detailExist$

// #bind.field.pageColumnExist#
            addUpdateSql("page_column_exist = ?", pageColumnExist);
// $bind.field.pageColumnExist$

// #bind.field.fieldCode#
            addUpdateSql("field_code = ?", fieldCode);
// $bind.field.fieldCode$

            type = "UPDATE";
            return this;
        }

        public EntityColumnEPC forDelete() {
            type = "DELETE";
            return this;
        }

        public EntityColumnEPC forCount() {
            type = "COUNT";
            return this;
        }

        public EntityColumnEPC sub() {
            return new EntityColumnEPC(this);
        }

        public EntityColumnEPC complete(boolean and) {
            finish(and);
            return parent == null ? this : (EntityColumnEPC) parent;
        }

        public EntityColumnFPC toFlex() {
            EntityColumnFPC flex = new EntityColumnFPC();
            flex.setUpdateSqlList(updateSqlList);
            flex.setUpdateValueList(updateValueList);
            flex.setSqlList(sqlList);
            flex.setValueList(valueList);
            flex.setType(type);
            return flex;
        }

        public Condition toCondition() {
            return toCondition(EntityColumn.class, "bs_entity_column");
        }

        // field epc auto
// #bind.field.id#
        public Id id() {
            return new Id();
        }

        // #bind.field.tableCode#
        public TableCode tableCode() {
            return new TableCode();
        }
// $bind.field.id$

        // #bind.field.createBy#
        public CreateBy createBy() {
            return new CreateBy();
        }

        // #bind.field.updateExist#
        public UpdateExist updateExist() {
            return new UpdateExist();
        }
// $bind.field.createBy$

        // #bind.field.updateBy#
        public UpdateBy updateBy() {
            return new UpdateBy();
        }

        // #bind.field.detailExist#
        public DetailExist detailExist() {
            return new DetailExist();
        }
// $bind.field.updateBy$

        // #bind.field.createTime#
        public CreateTime createTime() {
            return new CreateTime();
        }

        // #bind.field.pageColumnExist#
        public PageColumnExist pageColumnExist() {
            return new PageColumnExist();
        }
// $bind.field.createTime$

        // #bind.field.updateTime#
        public UpdateTime updateTime() {
            return new UpdateTime();
        }

        // #bind.field.fieldCode#
        public FieldCode fieldCode() {
            return new FieldCode();
        }
// $bind.field.updateTime$

        public class Id extends LongEPCField<EntityColumnEPC> {
            private Id() {
                super(EntityColumnEPC.this, "id", id);
            }
        }

        public class CreateBy extends StringEPCField<EntityColumnEPC> {
            private CreateBy() {
                super(EntityColumnEPC.this, "create_by", createBy);
            }
        }
// $bind.field.tableCode$

        // #bind.field.columnType#
        public ColumnType columnType() {
            return new ColumnType();
        }

        public class UpdateBy extends StringEPCField<EntityColumnEPC> {
            private UpdateBy() {
                super(EntityColumnEPC.this, "update_by", updateBy);
            }
        }
// $bind.field.columnType$

        // #bind.field.columnLength#
        public ColumnLength columnLength() {
            return new ColumnLength();
        }

        public class CreateTime extends LocalDateTimeEPCField<EntityColumnEPC> {
            private CreateTime() {
                super(EntityColumnEPC.this, "create_time", createTime);
            }
        }
// $bind.field.columnLength$

        // #bind.field.columnPrecision#
        public ColumnPrecision columnPrecision() {
            return new ColumnPrecision();
        }

        public class UpdateTime extends LocalDateTimeEPCField<EntityColumnEPC> {
            private UpdateTime() {
                super(EntityColumnEPC.this, "update_time", updateTime);
            }
        }
// $bind.field.columnPrecision$

        // #bind.field.columnScale#
        public ColumnScale columnScale() {
            return new ColumnScale();
        }

        public class TableCode extends StringEPCField<EntityColumnEPC> {
            private TableCode() {
                super(EntityColumnEPC.this, "table_code", tableCode);
            }
        }
// $bind.field.columnScale$

        // #bind.field.columnNullable#
        public ColumnNullable columnNullable() {
            return new ColumnNullable();
        }

        public class ColumnType extends StringEPCField<EntityColumnEPC> {
            private ColumnType() {
                super(EntityColumnEPC.this, "column_type", columnType);
            }
        }
// $bind.field.columnNullable$

        // #bind.field.fieldName#
        public FieldName fieldName() {
            return new FieldName();
        }

        public class ColumnLength extends IntegerEPCField<EntityColumnEPC> {
            private ColumnLength() {
                super(EntityColumnEPC.this, "column_length", columnLength);
            }
        }
// $bind.field.fieldName$

        // #bind.field.columnName#
        public ColumnName columnName() {
            return new ColumnName();
        }

        public class ColumnPrecision extends IntegerEPCField<EntityColumnEPC> {
            private ColumnPrecision() {
                super(EntityColumnEPC.this, "column_precision", columnPrecision);
            }
        }
// $bind.field.columnName$

        // #bind.field.methodName#
        public MethodName methodName() {
            return new MethodName();
        }

        public class ColumnScale extends IntegerEPCField<EntityColumnEPC> {
            private ColumnScale() {
                super(EntityColumnEPC.this, "column_scale", columnScale);
            }
        }
// $bind.field.methodName$

        // #bind.field.simpleType#
        public SimpleType simpleType() {
            return new SimpleType();
        }

        public class ColumnNullable extends StringEPCField<EntityColumnEPC> {
            private ColumnNullable() {
                super(EntityColumnEPC.this, "column_nullable", columnNullable);
            }
        }
// $bind.field.simpleType$

        // #bind.field.fullType#
        public FullType fullType() {
            return new FullType();
        }

        public class FieldName extends StringEPCField<EntityColumnEPC> {
            private FieldName() {
                super(EntityColumnEPC.this, "field_name", fieldName);
            }
        }
// $bind.field.fullType$

        // #bind.field.remark#
        public Remark remark() {
            return new Remark();
        }

        public class ColumnName extends StringEPCField<EntityColumnEPC> {
            private ColumnName() {
                super(EntityColumnEPC.this, "column_name", columnName);
            }
        }
// $bind.field.remark$

        // #bind.field.dataOrder#
        public DataOrder dataOrder() {
            return new DataOrder();
        }

        public class MethodName extends StringEPCField<EntityColumnEPC> {
            private MethodName() {
                super(EntityColumnEPC.this, "method_name", methodName);
            }
        }
// $bind.field.dataOrder$

        // #bind.field.searchOrder#
        public SearchOrder searchOrder() {
            return new SearchOrder();
        }

        public class SimpleType extends StringEPCField<EntityColumnEPC> {
            private SimpleType() {
                super(EntityColumnEPC.this, "simple_type", simpleType);
            }
        }
// $bind.field.searchOrder$

        // #bind.field.formOrder#
        public FormOrder formOrder() {
            return new FormOrder();
        }

        public class FullType extends StringEPCField<EntityColumnEPC> {
            private FullType() {
                super(EntityColumnEPC.this, "full_type", fullType);
            }
        }
// $bind.field.formOrder$

        // #bind.field.pageColumnOrder#
        public PageColumnOrder pageColumnOrder() {
            return new PageColumnOrder();
        }

        public class Remark extends StringEPCField<EntityColumnEPC> {
            private Remark() {
                super(EntityColumnEPC.this, "remark", remark);
            }
        }
// $bind.field.pageColumnOrder$

        // #bind.field.searchExist#
        public SearchExist searchExist() {
            return new SearchExist();
        }

        public class DataOrder extends IntegerEPCField<EntityColumnEPC> {
            private DataOrder() {
                super(EntityColumnEPC.this, "data_order", dataOrder);
            }
        }
// $bind.field.searchExist$

        // #bind.field.saveExist#
        public SaveExist saveExist() {
            return new SaveExist();
        }

        public class SaveExist extends StringEPCField<EntityColumnEPC> {
            private SaveExist() {
                super(EntityColumnEPC.this, "save_exist", saveExist);
            }
        }
// $bind.field.saveExist$

        public class SearchOrder extends IntegerEPCField<EntityColumnEPC> {
            private SearchOrder() {
                super(EntityColumnEPC.this, "search_order", searchOrder);
            }
        }

        public class UpdateExist extends StringEPCField<EntityColumnEPC> {
            private UpdateExist() {
                super(EntityColumnEPC.this, "update_exist", updateExist);
            }
        }
// $bind.field.updateExist$

        public class FormOrder extends IntegerEPCField<EntityColumnEPC> {
            private FormOrder() {
                super(EntityColumnEPC.this, "form_order", formOrder);
            }
        }

        public class DetailExist extends StringEPCField<EntityColumnEPC> {
            private DetailExist() {
                super(EntityColumnEPC.this, "detail_exist", detailExist);
            }
        }
// $bind.field.detailExist$

        public class PageColumnOrder extends IntegerEPCField<EntityColumnEPC> {
            private PageColumnOrder() {
                super(EntityColumnEPC.this, "page_column_order", pageColumnOrder);
            }
        }

        public class PageColumnExist extends StringEPCField<EntityColumnEPC> {
            private PageColumnExist() {
                super(EntityColumnEPC.this, "page_column_exist", pageColumnExist);
            }
        }
// $bind.field.pageColumnExist$

        public class SearchExist extends StringEPCField<EntityColumnEPC> {
            private SearchExist() {
                super(EntityColumnEPC.this, "search_exist", searchExist);
            }
        }

        public class FieldCode extends StringEPCField<EntityColumnEPC> {
            private FieldCode() {
                super(EntityColumnEPC.this, "field_code", fieldCode);
            }
        }
// $bind.field.fieldCode$

    }
}
